package fw.qaz.asmx.reader.utils;

import org.mozilla.universalchardet.UniversalDetector;

import java.io.File;
import java.io.FileInputStream;
import java.nio.charset.Charset;

public final class DetectCharset
{
    public static Charset detect(File f)
    {
        byte[] buf = new byte[4096];
        try
        {
            FileInputStream fis = new FileInputStream(f);
            UniversalDetector ud = new UniversalDetector(null);
            int cnt;
            while (true)
            {
                cnt = fis.read(buf);
                if (cnt > 0 && !ud.isDone())
                {
                    ud.handleData(buf, 0, cnt);
                    continue;
                }
                break;
            }
            ud.dataEnd();
            String encoding = ud.getDetectedCharset();
            if (encoding != null)
            {
                return Charset.forName(encoding);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
        return null;
    }

    //Thanks for http://hi.baidu.com/zdz8207/item/13abe809f904c718eafe38d5
//    public static boolean isMessyCode(String str)
//    {
//        for (int i = 0; i < str.length(); i++)
//        {
//            char c = str.charAt(i);
//            //当从Unicode编码向某个字符集转换时，如果在该字符集中没有对应的编码，则得到0x3f（即问号字符?）
//            //从其他字符集向Unicode编码转换时，如果这个二进制数在该字符集中没有标识任何的字符，则得到的结果是0xfffd
//            if ((int) c == 0xfffd)
//            {
//                return true;
//            }
//        }
//        return false;
//    }
}
